package leecode

func findMaxLength(nums []int) (result int) {
	//将0变成-1 , 求和为0的最长连续子数组的长度
	prefix := make([]int, len(nums)+1)
	for i := 0; i < len(nums); i++ {
		if nums[i] == 0 {
			nums[i] = -1
		}
		prefix[i+1] = prefix[i] + nums[i]
	}
	hashMap := make(map[int]int) //key为前缀和中的元素 , value为该元素第一次出现的位置
	for i := 0; i < len(prefix); i++ {
		if index, ok := hashMap[prefix[i]]; ok {
			result = max(result, i-index)
		} else {
			//更新出现的位置
			hashMap[prefix[i]] = i
		}
	}
	return result
}
